iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 6

Day05 - 自動配置機制初探

  • 分享至 

  • xImage
  •  

Day05 - 自動配置機制初探

前言

還記得Day01我們一步一步建立的Spring MVC專案嗎,我們把前端來的請求都轉交給DispatchServlet處理的設定嗎,請參考Spring官網寫的設定

<web-app>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/app-context.xml</param-value>
	</context-param>

	<servlet>
		<servlet-name>app</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value></param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>app</servlet-name>
		<url-pattern>/app/*</url-pattern>
	</servlet-mapping>

</web-app>

接下來,你一定會很好奇Spring Boot怎麼自動裝配這樣的設定,

開專案

https://ithelp.ithome.com.tw/upload/images/20230921/20128084gFHrlkq7Gc.png

初探自動裝配機制

自動裝配

我們導入web-starter就幫我們自動配置好相對應需要的Component例如:DispatcherServlet、tomcat等等。

我們先來看看Spring Boot都幫我們載入了哪些東西,SpringApplication.run回傳了ConfigurableApplicationContext,就從他找東西吧
https://ithelp.ithome.com.tw/upload/images/20230921/201280842TkU0Ejfqb.png
果然dispatchServlet在容器內
https://ithelp.ithome.com.tw/upload/images/20230921/20128084UrI1hCG953.png

Component Scan

  • SpringBoot默認掃描主程序所在的包及其下面的子包,也就是標註SpringBootApplication的類別,所以下面的HelloController就在其中囉!
    https://ithelp.ithome.com.tw/upload/images/20230921/20128084i1MGjsTa8j.png
  • 透過scanBasePackage可以修改掃描路徑,這樣就可以加進來了
    https://ithelp.ithome.com.tw/upload/images/20230921/20128084vejVUBpyDY.png

默認配置

  • 透過application.properties或是application.yaml我們可以修改默認的配置值
    修改server port為8888
    https://ithelp.ithome.com.tw/upload/images/20230921/201280845ILWkSLqrz.png
  • 配置文件的所有配置項是和某個類別進行綁定,例如Server相關的與Server.Properties進行綁定
    https://ithelp.ithome.com.tw/upload/images/20230921/20128084kgqKmfB4rL.png
  • 官方文件application properties

按需自動裝配

場景啟動器中的spring-boot-starter,透過autoconfigure進行按需自動裝配
https://ithelp.ithome.com.tw/upload/images/20230921/201280844MEqm16nLh.png
autoconfigure中有包山包海的自動裝配
https://ithelp.ithome.com.tw/upload/images/20230921/20128084SagPAUhL6c.png

小結

導入spring-boot-starter-xxx -> 觸發spring-boot-autoconfigure -> DI container就會有對應的功能

Reference


上一篇
Day04 - dependency management
下一篇
Day06 - 常用註解-組件註冊
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言